# intel-vaapi-driver package version number
m4_define([intel_vaapi_driver_major_version], [2])
m4_define([intel_vaapi_driver_minor_version], [4])
m4_define([intel_vaapi_driver_micro_version], [0])
m4_define([intel_vaapi_driver_pre_version],   [1])
m4_define([intel_vaapi_driver_version],
          [intel_vaapi_driver_major_version.intel_vaapi_driver_minor_version.intel_vaapi_driver_micro_version])
m4_if(intel_vaapi_driver_pre_version, [0], [], [
m4_append([intel_vaapi_driver_version], intel_vaapi_driver_pre_version, [.pre])
])

# libva minimum version requirement
m4_define([va_api_version], [1.4.0])

# libdrm minimum version requirement
m4_define([libdrm_version], [2.4.52])

# Wayland minimum version requirement
# 1.11.0 for wl_proxy_create_wrapper
m4_define([wayland_api_version], [1.11.0])

AC_PREREQ([2.57])
AC_INIT([intel_vaapi_driver],
        [intel_vaapi_driver_version],
        [https://github.com/intel/intel-vaapi-driver/issues/new],
        [intel-vaapi-driver],
        [https://github.com/intel/intel-vaapi-driver])
AC_CONFIG_SRCDIR([Makefile.am])
AM_INIT_AUTOMAKE([1.9 tar-ustar -Wno-portability foreign])

AC_CONFIG_HEADERS([src/config.h])

INTEL_DRIVER_MAJOR_VERSION=intel_vaapi_driver_major_version
INTEL_DRIVER_MINOR_VERSION=intel_vaapi_driver_minor_version
INTEL_DRIVER_MICRO_VERSION=intel_vaapi_driver_micro_version
AC_DEFINE([INTEL_DRIVER_MAJOR_VERSION], [intel_vaapi_driver_major_version], [Major version of the driver])
AC_DEFINE([INTEL_DRIVER_MINOR_VERSION], [intel_vaapi_driver_minor_version], [Minor version of the driver])
AC_DEFINE([INTEL_DRIVER_MICRO_VERSION], [intel_vaapi_driver_micro_version], [Micro version of the driver])
AC_DEFINE([INTEL_DRIVER_PRE_VERSION], [intel_vaapi_driver_pre_version], [Preversion of the driver])

INTEL_DRIVER_LT_LDFLAGS="-avoid-version"
AC_SUBST(INTEL_DRIVER_LT_LDFLAGS)

dnl Use pretty build output with automake >= 1.11
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])], [
    AM_DEFAULT_VERBOSITY=1
    AC_SUBST(AM_DEFAULT_VERBOSITY)
])

AC_ARG_ENABLE(x11,
    [AC_HELP_STRING([--enable-x11],
                    [build with VA/X11 API support @<:@default=yes@:>@])],
    [], [enable_x11="yes"])

AC_ARG_ENABLE([wayland],
    [AC_HELP_STRING([--enable-wayland],
                    [build with VA/Wayland API support @<:@default=yes@:>@])],
    [], [enable_wayland="yes"])

AC_ARG_ENABLE([hybrid-codec],
    [AC_HELP_STRING([--enable-hybrid-codec],
                    [build with hybrid codec support @<:@default=no@:>@])],
    [], [enable_hybrid_codec="no"])

AC_ARG_ENABLE([tests],
    [AC_HELP_STRING([--enable-tests],
                    [build tests @<:@default=no@:>@])],
    [], [enable_tests="no"])

AC_DISABLE_STATIC
AC_PROG_LIBTOOL
AC_PROG_CC
AM_PROG_CC_C_O
AC_PROG_CXX
AC_C_BIGENDIAN
AC_HEADER_STDC
AC_SYS_LARGEFILE
AC_CHECK_LIB([m], [sin])
AC_CHECK_FUNCS([log2f])
AC_CHECK_PROGS([PYTHON3], [python3 python])

LIBVA_PACKAGE_VERSION=libva_package_version
AC_SUBST(LIBVA_PACKAGE_VERSION)

AC_SEARCH_LIBS([dlopen], [dl], [], [
  AC_MSG_ERROR([unable to find the dlopen() function])
])


# Check for -fstack-protector
ssp_cc=yes
if test "X$CC-cc" != "X"; then
    AC_MSG_CHECKING([whether ${CC-cc} accepts -fstack-protector])
    ssp_old_cflags="$CFLAGS"
    CFLAGS="$CFLAGS -fstack-protector"
    AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[alloca(100);]])], [], [ssp_cc=no])
    AC_MSG_RESULT([$ssp_cc])
    if test "X$ssp_cc" = "Xno"; then
        CFLAGS="$ssp_old_cflags"
    else
        AC_DEFINE([ENABLE_SSP_CC], 1, [Define if SSP C support is enabled.])
    fi
fi
AM_CONDITIONAL(USE_SSP, test "$ssp_cc" = "yes")

dnl Check for recent enough DRM
LIBDRM_VERSION=libdrm_version
PKG_CHECK_MODULES([DRM], [libdrm >= $LIBDRM_VERSION libdrm_intel])
AC_SUBST(LIBDRM_VERSION)

dnl Check for gen4asm
PKG_CHECK_MODULES(GEN4ASM, [intel-gen4asm >= 1.9], [gen4asm=yes], [gen4asm=no])
AC_PATH_PROG([GEN4ASM], [intel-gen4asm])
AS_IF([test "x$GEN4ASM" = "x" ], [AM_CONDITIONAL(HAVE_GEN4ASM, false)],
    [AM_CONDITIONAL(HAVE_GEN4ASM, [test x$gen4asm = xyes])])

dnl Check for git
AC_ARG_VAR([GIT], [Path to git program, if any])
AC_PATH_PROG([GIT], [git])
AM_CONDITIONAL([HAVE_GIT], [test -n "$GIT"])

dnl Check for VA-API
PKG_CHECK_MODULES(LIBVA_DEPS, [libva >= va_api_version])

dnl Check for VA/DRM API only if tests are enabled
if test "$enable_tests" = "yes"; then
    PKG_CHECK_MODULES(LIBVA_DRM_DEPS, [libva-drm >= va_api_version])
fi

if test "$enable_hybrid_codec" = "yes"; then
    AC_DEFINE([HAVE_HYBRID_CODEC], [1], [Defined to 1 if hybrid codec is needed])
fi

AM_CONDITIONAL(ENABLE_TESTS, test "$enable_tests" = "yes")

VA_VERSION=`$PKG_CONFIG --modversion libva`
VA_MAJOR_VERSION=`echo "$VA_VERSION" | cut -d'.' -f1`
VA_MINOR_VERSION=`echo "$VA_VERSION" | cut -d'.' -f2`
VA_MICRO_VERSION=`echo "$VA_VERSION" | cut -d'.' -f3`
VA_VERSION_STR="$VA_VERSION"

VA_DRIVER_INIT_FUNC="__vaDriverInit_${VA_MAJOR_VERSION}_${VA_MINOR_VERSION}"
AC_DEFINE_UNQUOTED([VA_DRIVER_INIT_FUNC], [$VA_DRIVER_INIT_FUNC],
    [Define driver entry-point])

dnl Check for VA/X11 API
USE_X11="$enable_x11"
if test "$USE_X11" = "yes"; then
    PKG_CHECK_MODULES(LIBVA_X11_DEPS, [libva-x11 >= va_api_version],
      [AC_DEFINE([HAVE_VA_X11], [1], [Defined to 1 if VA/X11 API is enabled])],
      [USE_X11="no"])
fi
AM_CONDITIONAL(USE_X11, test "$USE_X11" = "yes")

dnl Check for VA-API drivers path
AC_ARG_VAR(LIBVA_DRIVERS_PATH, [drivers install path])
if test -z "$LIBVA_DRIVERS_PATH"; then
    AC_MSG_CHECKING([for VA drivers path])
    LIBVA_DRIVERS_PATH=`$PKG_CONFIG libva --variable driverdir`
fi
if test -z "$LIBVA_DRIVERS_PATH"; then
    LIBVA_DRIVERS_PATH="${libdir}/xorg/modules/drivers"
fi
AC_MSG_RESULT([$LIBVA_DRIVERS_PATH])
AC_SUBST(LIBVA_DRIVERS_PATH)

# Check for Wayland
USE_WAYLAND="no"
if test "$enable_wayland" = "yes"; then
    PKG_CHECK_MODULES([LIBVA_WAYLAND_DEPS], [libva-wayland >= va_api_version],
        [
          PKG_CHECK_MODULES([WAYLAND_CLIENT],
             [wayland-client >= wayland_api_version],
             [
                USE_WAYLAND="yes"
                WAYLAND_PREFIX=`$PKG_CONFIG --variable=prefix wayland-client`
                AC_PATH_PROG([WAYLAND_SCANNER], [wayland-scanner],
                    [USE_ WAYLAND="no"],
                    [${WAYLAND_PREFIX}/bin$PATH_SEPARATOR$PATH])
             ], [:])
        ], [:])
    if test "$USE_WAYLAND" = "yes"; then
      AC_DEFINE([HAVE_VA_WAYLAND], [1],
        [Defined to 1 if VA/Wayland API is enabled])
    fi
fi
AM_CONDITIONAL(USE_WAYLAND, test "$USE_WAYLAND" = "yes")

AC_OUTPUT([
    Makefile
    src/Makefile
    src/shaders/Makefile
    src/shaders/brc/Makefile
    src/shaders/brc/bsw/Makefile
    src/shaders/brc/skl/Makefile
    src/shaders/brc/cnl/Makefile
    src/shaders/h264/Makefile
    src/shaders/h264/ildb/Makefile
    src/shaders/h264/mc/Makefile
    src/shaders/mpeg2/Makefile
    src/shaders/mpeg2/vld/Makefile
    src/shaders/post_processing/Makefile
    src/shaders/post_processing/gen5_6/Makefile
    src/shaders/post_processing/gen7/Makefile
    src/shaders/post_processing/gen75/Makefile
    src/shaders/post_processing/gen8/Makefile
    src/shaders/post_processing/gen9/Makefile
    src/shaders/render/Makefile
    src/shaders/utils/Makefile
    src/shaders/vme/Makefile
    test/Makefile
])

dnl Print summary
BACKENDS="drm"
AS_IF([test "$USE_X11" = "yes"], [BACKENDS="$BACKENDS x11"])
AS_IF([test "$USE_WAYLAND" = "yes"], [BACKENDS="$BACKENDS wayland"])

echo
echo $PACKAGE configuration summary:
echo
echo VA-API version ................... : $VA_VERSION_STR
echo VA-API drivers path .............. : $LIBVA_DRIVERS_PATH
echo Windowing systems ................ : $BACKENDS
echo Build tests ...................... : $enable_tests
echo
